home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / comm / tcp / HyperMail102.lha / HyperMail / getopt.c < prev    next >
C/C++ Source or Header  |  1995-06-18  |  1KB  |  64 lines

  1. /*
  2.  * getopt - get option letter from argv
  3.  */
  4.  
  5. #include <stdio.h>
  6.  
  7. char    *optarg;    /* Global argument pointer. */
  8. int    optind = 0;    /* Global argv index. */
  9.  
  10. static char    *scan = NULL;    /* Private scan pointer. */
  11.  
  12. extern char    *index();
  13.  
  14. int
  15. getopt(argc, argv, optstring)
  16. int argc;
  17. char *argv[];
  18. char *optstring;
  19. {
  20.     register char c;
  21.     register char *place;
  22.  
  23.     optarg = NULL;
  24.  
  25.     if (scan == NULL || *scan == '\0') {
  26.         if (optind == 0)
  27.             optind++;
  28.     
  29.         if (optind >= argc || argv[optind][0] != '-' || argv[optind][1] == '\0')
  30.             return(EOF);
  31.         if (strcmp(argv[optind], "--")==0) {
  32.             optind++;
  33.             return(EOF);
  34.         }
  35.     
  36.         scan = argv[optind]+1;
  37.         optind++;
  38.     }
  39.  
  40.     c = *scan++;
  41.     place = index(optstring, c);
  42.  
  43.     if (place == NULL || c == ':') {
  44.         fprintf(stderr, "%s: unknown option -%c\n", argv[0], c);
  45.         return('?');
  46.     }
  47.  
  48.     place++;
  49.     if (*place == ':') {
  50.         if (*scan != '\0') {
  51.             optarg = scan;
  52.             scan = NULL;
  53.         } else if (optind < argc) {
  54.             optarg = argv[optind];
  55.             optind++;
  56.         } else {
  57.             fprintf(stderr, "%s: -%c argument missing\n", argv[0], c);
  58.             return('?');
  59.         }
  60.     }
  61.  
  62.     return(c);
  63. }
  64.